From 116ecaa63533dda55b393b5dad5fb504499b3f9a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 16 Mar 2018 12:29:54 +0300 Subject: [PATCH] Avoid intermediate vector --- src/cargo/core/resolver/mod.rs | 8 ++++---- src/cargo/ops/resolve.rs | 2 +- tests/testsuite/resolve.rs | 11 +++++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/resolver/mod.rs b/src/cargo/core/resolver/mod.rs index 9d765933a..e4f7483ac 100644 --- a/src/cargo/core/resolver/mod.rs +++ b/src/cargo/core/resolver/mod.rs @@ -416,7 +416,7 @@ pub fn resolve( summaries: &[(Summary, Method)], replacements: &[(PackageIdSpec, Dependency)], registry: &mut Registry, - try_to_use: &[&PackageId], + try_to_use: &HashSet<&PackageId>, config: Option<&Config>, print_warnings: bool, ) -> CargoResult { @@ -662,7 +662,7 @@ impl ConflictReason { struct RegistryQueryer<'a> { registry: &'a mut (Registry + 'a), replacements: &'a [(PackageIdSpec, Dependency)], - try_to_use: HashSet<&'a PackageId>, + try_to_use: &'a HashSet<&'a PackageId>, // TODO: with nll the Rc can be removed cache: HashMap>>, } @@ -671,13 +671,13 @@ impl<'a> RegistryQueryer<'a> { fn new( registry: &'a mut Registry, replacements: &'a [(PackageIdSpec, Dependency)], - try_to_use: &'a [&'a PackageId], + try_to_use: &'a HashSet<&'a PackageId>, ) -> Self { RegistryQueryer { registry, replacements, cache: HashMap::new(), - try_to_use: try_to_use.iter().cloned().collect(), + try_to_use, } } diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index 618613964..e52e71de2 100644 --- a/src/cargo/ops/resolve.rs +++ b/src/cargo/ops/resolve.rs @@ -170,7 +170,7 @@ pub fn resolve_with_previous<'a, 'cfg>( // In the case where a previous instance of resolve is available, we // want to lock as many packages as possible to the previous version // without disturbing the graph structure. - let mut try_to_use = Vec::new(); + let mut try_to_use = HashSet::new(); if let Some(r) = previous { trace!("previous: {:?}", r); register_previous_locks(ws, registry, r, keep); diff --git a/tests/testsuite/resolve.rs b/tests/testsuite/resolve.rs index e991f9c05..2d99846d3 100644 --- a/tests/testsuite/resolve.rs +++ b/tests/testsuite/resolve.rs @@ -1,4 +1,4 @@ -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashSet}; use hamcrest::{assert_that, contains, is_not}; @@ -33,7 +33,14 @@ fn resolve( let mut registry = MyRegistry(registry); let summary = Summary::new(pkg.clone(), deps, BTreeMap::new(), None).unwrap(); let method = Method::Everything; - let resolve = resolver::resolve(&[(summary, method)], &[], &mut registry, &[], None, false)?; + let resolve = resolver::resolve( + &[(summary, method)], + &[], + &mut registry, + &HashSet::new(), + None, + false, + )?; let res = resolve.iter().cloned().collect(); Ok(res) } -- 2.30.2